home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / mint / lib / mntlib44.zoo / mntlib / ldiv.c < prev    next >
C/C++ Source or Header  |  1994-03-01  |  711b  |  46 lines

  1. /*
  2.  * ldiv
  3.  *    this one should be compat with -fpcc-struct-return
  4.  *
  5.  *    ++jrb    bammi@dsrgsun.ces.cwru.edu
  6.  */
  7. #include <stdlib.h>
  8.  
  9. #ifdef __GNUC__
  10.  
  11. long __divsi3(long, long);    /* returns: quot in d0.l  remainder in d1.l */
  12.  
  13. ldiv_t
  14. ldiv(long num, long denom)
  15. {
  16.     ldiv_t    result;
  17.  
  18.     __asm__ volatile("\
  19.          movl    %3,sp@-
  20.         movl    %2,sp@-
  21.         jsr    ___divsi3
  22.         addqw    #8,sp
  23.         movl    d0,%0
  24.         movl    d1,%1"
  25.         : "=g"(result.quot), "=g"(result.rem)
  26.         : "r"(num), "r"(denom)
  27.         ); /* compiler dependency, dont tell gcc about d0,d1 clobb */
  28.     return result;
  29. }
  30.  
  31. #else /* !__GNUC__ */
  32.  
  33. ldiv_t
  34. ldiv(num, denom)
  35. long num, denom;
  36. {
  37.     ldiv_t res;
  38.     
  39.     res.quot = num / denom;
  40.     res.rem = num % denom;
  41.     
  42.     return res;
  43. }
  44.  
  45. #endif /* !__GNUC__ */
  46.